
package gui;

import java.awt.Component;
import java.awt.EventQueue;

import javax.swing.JDialog;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JMenu;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import java.awt.Rectangle;
import javax.swing.JComboBox;

import CUENTA.Banco;
import CUENTA.Cuenta;
import CUENTA.Movimiento;
import Motor.Modelo;
import Motor.excepciones.ENoExisteObjeto;
import UTILIDADES.Categoria;
import UTILIDADES.ListaGeneral;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.SwingConstants;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

@SuppressWarnings({ "serial", "unused" })
public class GastoPanel extends JDialog{
	private JTextField textFieldCantidad;
	private JButton btnCancelar;
	private JComboBox<String> comboCategoria;
	private JButton btnAceptar;
	private JComboBox<String> comboBoxFuente;
	private Modelo m;
	private Movimiento movimiento ;
	private JComboBox<String> subCatcombo;
	
	
	public GastoPanel(final Modelo mod, JTable table) {
		super();
		m = mod;
		movimiento = new Movimiento();
		setResizable(false);
		setTitle("A\u00F1adir gasto");		
		
		setBounds(10, 11, 334, 236);
		
		getContentPane().setLayout(null);
		
		JLabel lblCantidad = new JLabel("Cantidad");
		lblCantidad.setBounds(9, 11, 87, 26);
		getContentPane().add(lblCantidad);
		
		textFieldCantidad = new JTextField();
		textFieldCantidad.setHorizontalAlignment(SwingConstants.RIGHT);
		textFieldCantidad.setText("0");
		textFieldCantidad.setBounds(222, 14, 86, 20);
		getContentPane().add(textFieldCantidad);
		textFieldCantidad.setColumns(10);
		
		textFieldCantidad.setSelectionStart(0);
		
		JLabel lblSubcategoria = new JLabel("Subcategoria");
		lblSubcategoria.setBounds(9, 83, 86, 14);
		getContentPane().add(lblSubcategoria);
		
		JLabel labelFuente = new JLabel("Fuente");
		labelFuente.setBounds(9, 117, 62, 22);
		getContentPane().add(labelFuente);
		
		btnAceptar = new JButton("Aceptar");
		btnAceptar.setEnabled(false);
		
		subCatcombo = new JComboBox<>();
		//con esto solo permite que se guarden datos si hay una subcategoria elegida
		subCatcombo.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				btnAceptar.setEnabled(true);
			}
		});
		subCatcombo.setBounds(222, 80, 87, 20);
		getContentPane().add(subCatcombo);
			
		btnAceptar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				//primero coger los datos que hemos introducido en la gui
				//despues hacer el movimento
				//despues hacer el m.add con el movimiento
				
				if(comboBoxFuente.getItemCount()<1)
					errorNoHayCuentas(mod);
				else{
							
				
					try {
						String cantidad = textFieldCantidad.getText();
						int monto=Integer.parseInt(cantidad);
						String concepto = subCatcombo.getSelectedItem().toString();
						String categoria = comboCategoria.getSelectedItem().toString();
						String Fuente = comboBoxFuente.getSelectedItem().toString();
						Categoria cat;
						cat = new Categoria(categoria,concepto);
						Movimiento mov;
						mov=new Movimiento(new Date(System.currentTimeMillis()),concepto,cat,monto);
						mod.add(mov,Fuente );
					
						MesActual.updateTabla(mod);
					
					} catch (ENoExisteObjeto e1) {
						System.out.println("catch2");
					}
				}
				
				dispose();
			}
		});
		btnAceptar.setBounds(9, 162, 89, 23);
		getContentPane().add(btnAceptar);
		
		btnCancelar = new JButton("Cancelar");
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		
		btnCancelar.setBounds(207, 162, 101, 23);
		getContentPane().add(btnCancelar);
		
		JLabel lblCategoria = new JLabel("Categoria");
		lblCategoria.setBounds(9, 48, 87, 14);
		getContentPane().add(lblCategoria);
		
		comboCategoria = new JComboBox<String>();
		comboCategoria.setBounds(221, 45, 87, 20);
		getContentPane().add(comboCategoria);
		
		
		comboBoxFuente = new JComboBox<String>();
		comboBoxFuente.setBounds(207, 117, 101, 20);
		getContentPane().add(comboBoxFuente);
		
		
		//carga de las categorias
		
		final Categoria mock=new Categoria(0,0);
		ArrayList<String> lista=new ArrayList<String>();
		ListaGeneral<String> otraLista=new ListaGeneral<String>();
		mock.getCategorias(otraLista);
		lista=otraLista.get_lista();
		
		for(String cat:lista){
			comboCategoria.addItem(cat);
			
		}
		
		comboCategoria.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			
				String categoriaSeleccionada = comboCategoria.getSelectedItem().toString();
				try {
					subCatcombo.removeAllItems(); //limpia las sub-categorias anteriores
					
					String[] subcat= mock.getSubCategorias(categoriaSeleccionada);
					//lista=subcat.get_lista();
					//comboCategoria.disable();
					for(String cat1:subcat){
						subCatcombo.addItem(cat1);
					}
					
					subCatcombo.removeItemAt(0); //elimina la categoria repetida
				} catch (ENoExisteObjeto e1) {
					// TODO Auto-generated catch block
					//e1.printStackTrace();
				}
			}	
		});
		
		ArrayList<Cuenta> cuentas =mod.getCuentas();
		for(Cuenta cuenta:cuentas)
			comboBoxFuente.addItem(cuenta.get_numeroCuenta().toString());
	}
	public void errorNoHayCuentas(Modelo mod) {
		JOptionPane.showMessageDialog(this,
				"Todavia no ha creado ninguna cuenta. "+ "\nPor favor cree una cuenta bancaria primero.",
				"No Existen Cuentas", JOptionPane.OK_OPTION);
		
		JDialog cuenta = new NuevaCuentaWindow(mod);
		cuenta.setVisible(true);
		cuenta.setLocationRelativeTo(null);
		}
}
